using System;
using System.Collections.Generic;
using System.Text;
using RC.ControlAcceso.BaseDatos;
using System.Data;
using RC.CodigoBarras.Utiles;

namespace RC.ControlAcceso.ObjetosNegocio
{
    public class CA2TipoHorario
    {
        #region Variables
        private int _idTipoHorario;
        private string _descripcion;
        private bool _estaActivo;

        // Objeto de la base de datos
        CATipoHorarioBD mTipoHorarioBD;
        #endregion

        #region Propiedades
        public CATipoHorarioBD TipoHorarioBD
        {
            get {
                if (mTipoHorarioBD == null)
                {
                    mTipoHorarioBD = new CATipoHorarioBD();
                }
                return mTipoHorarioBD;
            }
            set {
                mTipoHorarioBD = value;
            }
        }
        public int IdTipoHorario
        {
            get { return _idTipoHorario; }
            set { _idTipoHorario = value; }
        }        
        public string Descripcion
        {
            get { return _descripcion; }
            set { _descripcion = value; }
        }
        public bool EstaActivo
        {
            get { return _estaActivo; }
            set { _estaActivo = value; }
        }        
           
        #endregion

        #region Constructores
        public CA2TipoHorario()
        {
            TipoHorarioBD = new CATipoHorarioBD();
            AsignarValoresIniciales();
        }        
        public CA2TipoHorario(int pIdTipoHorario)
        {
            TipoHorarioBD = new CATipoHorarioBD(pIdTipoHorario);
            AsignarBDaON();
        }
        public CA2TipoHorarioColeccion ObtenerTipoHorario(int pIdTipoHorario)
        {
            TipoHorarioBD = new CATipoHorarioBD(pIdTipoHorario);
            AsignarBDaON();

            CA2TipoHorarioColeccion _tipoHorarios = new CA2TipoHorarioColeccion();
            _tipoHorarios.Add(this);
            return _tipoHorarios;
        }
        private void AsignarValoresIniciales()
        {
            IdTipoHorario = -1;
            Descripcion = "";
            EstaActivo = true;
        }
        #endregion

        #region Funciones
        /// <summary>
        /// Asigna los datos del objeto de base de datos a el objeto de negocio.
        /// </summary>
        private void AsignarBDaON()
        {
            if (mTipoHorarioBD == null)
                return;

            IdTipoHorario = mTipoHorarioBD.IdTipoHorario;
            Descripcion = mTipoHorarioBD.Descripcion;            
            EstaActivo = mTipoHorarioBD.EstaActivo;
        }
        /// <summary>
        /// Asigna los datos del objeto de negocio al objeto de base de datos.
        /// </summary>
        private void AsignarONaBD()
        {
            if (mTipoHorarioBD == null)
                mTipoHorarioBD = new CATipoHorarioBD();

            mTipoHorarioBD.IdTipoHorario = IdTipoHorario;
            mTipoHorarioBD.Descripcion = Descripcion;            
            mTipoHorarioBD.EstaActivo = EstaActivo;
        }        
        /// <summary>
        /// Agrega un TipoHorario.
        /// </summary>
        /// <returns>No devuelve nada.</returns>
        public void Agregar()
        {
            AsignarONaBD();
            TipoHorarioBD.IdTipoHorario = TipoHorarioBD.Insertar();            
            AsignarBDaON();
        }
        /// <summary>
        /// Actualiza el objeto.
        /// </summary>
        /// <returns>No devuelve nada.</returns>
        public void Actualizar()
        {
            AsignarONaBD();
            TipoHorarioBD.Actualizar();
        }
        /// <summary>
        /// Carga un objeto.
        /// </summary>
        /// <returns>No devuelve nada.</returns>
        public void Editar()
        {
            AsignarONaBD();
            TipoHorarioBD.Editar();
            AsignarBDaON();
        }        
                
        public CA2TipoHorario AsignarRowATipoHorario(DataRow pRow)
        {
            CA2TipoHorario _tipoHorario = new CA2TipoHorario();
            
            _tipoHorario.IdTipoHorario = int.Parse(pRow["IdTipoHorario"].ToString());
                        
            _tipoHorario.Descripcion = pRow["Descripcion"].ToString();           

            try { _tipoHorario.EstaActivo = bool.Parse(pRow["EstaActivo"].ToString()); }
            catch { _tipoHorario.EstaActivo = true; }

            return _tipoHorario;
        }
        #endregion

 
    }
    public class CA2TipoHorarioColeccion : System.Collections.CollectionBase
    {
        public void Add(CA2TipoHorario pTipoHorario)
        {
            this.List.Add(pTipoHorario);
        }
        public void Remove(int index)
        {
            if (index <= Count - 1 || index >= 0)
            {
                this.List.RemoveAt(index);
            }
            else
            {
                throw new System.ArgumentException("Fuera de rango", "original");
            }
        }
        public CA2TipoHorario this[int index]
        {
            get { return ((CA2TipoHorario)(this.List[index])); }
            set { this.List[index] = value; }
        }
        /// <summary>
        /// Devuelve el objeto TipoHorario que corresponde al nombre especificado.
        /// Si la TipoHorario no existe, devuel Null.
        /// </summary>
        /// <param name="pNombreTipoHorario"></param>
        /// <returns></returns>
        public CA2TipoHorario ObtenerTipoHorarioPorNombre(string pNombreTipoHorario)
        {
            foreach (CA2TipoHorario _tipoHorario in this)
                try
                {
                    if (_tipoHorario.Descripcion.ToUpper() == pNombreTipoHorario.ToUpper())
                        return _tipoHorario;
                }
                catch { }

            // si no lo encuentra devuelve vacio
            return null;
        }
        /// <summary>
        /// Obtiene todas las TipoHorarios
        /// </summary>
        public CA2TipoHorarioColeccion ObtenerTodosLosTipoHorarios()
        {
            CATipoHorarioBD _tipoHorario = new CATipoHorarioBD();
            DataSet _tipoHorariosDS = _tipoHorario.Recuperar();
            return AsignarDatasetAColeccion(_tipoHorariosDS);
        }
        /// <summary>
        /// Asigna los valores del dataset a el objeto coleccion.
        /// </summary>
        /// <param name="pDSLegajos"></param>
        /// <returns></returns>
        private CA2TipoHorarioColeccion AsignarDatasetAColeccion(DataSet pTipoHorariosDS)
        {
            if ((pTipoHorariosDS == null) || (pTipoHorariosDS.Tables[0].Rows.Count == 0))
                return null;

            CA2TipoHorarioColeccion _resultado = new CA2TipoHorarioColeccion();
            CA2TipoHorario _tipoHorario = new CA2TipoHorario(); //lo creo aca por que tengo que usar solamente un metodo que tiene 

            // recorro todas las filas y cargo los objetos
            foreach (DataRow _row in pTipoHorariosDS.Tables[0].Rows)
            {
                // asigno los valores a el objeto y el objeto a la coleccion
                _resultado.Add(_tipoHorario.AsignarRowATipoHorario(_row));
            }

            return _resultado;

        }
        /// <summary>
        /// Obtiene todas las TipoHorarios activas utilizables
        /// </summary>
        /// <returns></returns>
        private CA2TipoHorarioColeccion ObtenerTipoHorariosActivos()
        {
            CA2TipoHorarioColeccion _resultado = new CA2TipoHorarioColeccion();
            foreach (CA2TipoHorario _tipoHorario in this)
                if (_tipoHorario.EstaActivo == true)
                    _resultado.Add(_tipoHorario);

            return _resultado;
        }
    }
}